#include <stdint.h>
#include "keyboard.h"
#include "serial.h"

#define KBD_DATA_PORT 0x60  // 键盘数据端口

// 从端口读取一个字节
static inline uint8_t inb(uint16_t port) {
    uint8_t ret;
    asm volatile ("inb %1, %0" : "=a"(ret) : "Nd"(port));
    return ret;
}

// 初始化键盘（占位）
void keyboard_init() {
    // 目前不做中断处理，只做轮询读取
}

// 读取单个按下的字符
char keyboard_read_char() {
    uint8_t scancode;
    while (1) {
        scancode = inb(KBD_DATA_PORT);

        if (scancode < 0x80) {  // 仅处理按下事件
            char c = 0;

            // 数字 1-0
            if (scancode >= 0x02 && scancode <= 0x0B)
                c = '1' + scancode - 0x02;
            // 字母 q-p
            else if (scancode >= 0x10 && scancode <= 0x19)
                c = 'q' + scancode - 0x10;
            // 回车
            else if (scancode == 0x1C)
                c = '\n';
            // 空格
            else if (scancode == 0x39)
                c = ' ';
            
            if (c != 0)
                return c;
        }
    }
}
